LINQ (Language Integrated Query) কুয়েরি তৈরির সময় দুটি এক্সিকিউশন মডেল রয়েছে: Deferred Execution এবং Immediate Execution। এই দুটি কৌশল পারফরম্যান্স এবং ডেটার প্রক্রিয়াকরণ পদ্ধতিতে গুরুত্বপূর্ণ পার্থক্য তৈরি করে। এখানে উভয়ের ব্যাখ্যা এবং ব্যবহারের ক্ষেত্রে পার্থক্য আলোচনা করা হচ্ছে।
Deferred Execution হল একটি LINQ কুয়েরি এক্সিকিউট করার কৌশল, যেখানে কুয়েরি তৈরি হওয়ার পর তা তৎক্ষণাৎ এক্সিকিউট হয় না। কুয়েরি এক্সিকিউট হয় শুধুমাত্র যখন আপনি তার উপর কোনো অপারেশন বা ফলাফল নিতে চান। এটি এক্সিকিউশনের সময়ের জন্য অপেক্ষা করে, এবং এই সময়ের মধ্যে কুয়েরি পুনরায় পরিবর্তিত হতে পারে বা পুনরায় চালানো হতে পারে।
var people = new List<Person>
{
new Person { Name = "John", Age = 30 },
new Person { Name = "Jane", Age = 25 },
new Person { Name = "Paul", Age = 35 }
};
// Deferred Execution
var query = people.Where(p => p.Age > 30); // Query is defined, but not executed yet
// Query executed when iteration starts
foreach (var person in query)
{
Console.WriteLine(person.Name);
}
এখানে, Where
ক্লজ দিয়ে একটি কুয়েরি তৈরি করা হয়েছে, কিন্তু এটি তখনই এক্সিকিউট হবে যখন foreach লুপ চলবে। এর মানে হল যে কুয়েরি যখন রান করবে, তখন কেবলমাত্র Age > 30 শর্ত মেনে ডেটা বের হবে।
Immediate Execution হল একটি LINQ কুয়েরি এক্সিকিউট করার কৌশল যেখানে কুয়েরি তৈরি হওয়ার সঙ্গে সঙ্গে তা তৎক্ষণাৎ এক্সিকিউট হয় এবং ফলাফলকে সরাসরি সংগ্রহ করা হয়। এর মানে, কুয়েরি রান হওয়া থেকে ডেটার সাথে কাজ করার জন্য একটি নির্দিষ্ট ফলাফল (যেমন একটি List
বা Array
) মেমোরি-তে সংরক্ষিত হবে।
var people = new List<Person>
{
new Person { Name = "John", Age = 30 },
new Person { Name = "Jane", Age = 25 },
new Person { Name = "Paul", Age = 35 }
};
// Immediate Execution
var query = people.Where(p => p.Age > 30).ToList(); // Query is executed immediately and result is stored in a list
foreach (var person in query)
{
Console.WriteLine(person.Name);
}
এখানে, ToList()
ব্যবহার করা হয়েছে যা Immediate Execution এর উদাহরণ। কুয়েরি তৈরি হওয়ার সঙ্গে সঙ্গে এটি এক্সিকিউট হবে এবং ফলাফল একটি List
-এ সংরক্ষিত হবে। আপনি পরবর্তী সময়ে এই ফলাফলটি ব্যবহার করতে পারবেন, কিন্তু কুয়েরি আবার এক্সিকিউট হবে না।
বৈশিষ্ট্য | Deferred Execution | Immediate Execution |
---|---|---|
কুয়েরি এক্সিকিউশন সময় | কেবল যখন প্রয়োজন, তখন এক্সিকিউট হয় | কুয়েরি তৈরি হওয়ার সাথে সাথে এক্সিকিউট হয় |
ফলাফল সংগ্রহ | ফলাফল সংগ্রহ করা হয় যখন কুয়েরি চালানো হয় | ফলাফল তৎক্ষণাৎ সংগ্রহ করা হয় এবং মেমোরি-তে সংরক্ষিত হয় |
মেমোরি ব্যবস্থাপনা | মেমোরি সাশ্রয়ী, কারণ কেবল যখন প্রয়োজন তখনই ডেটা লোড হয় | মেমোরি-তে ডেটা মজুদ থাকে যা অপটিমাইজেশনের জন্য উপযুক্ত নয় |
কোড পরিবর্তন | ডেটা পরিবর্তিত হতে পারে কুয়েরি চালানোর সময় | এক্সিকিউট হওয়া শেষে ফলাফল পরিবর্তন করা সম্ভব নয় |
ব্যবহার | লাইভ ডেটা ব্যবহার করতে যখন ফলাফল আপডেট হতে পারে | যখন নির্দিষ্ট সময়ের জন্য স্থির ফলাফল দরকার |
Deferred Execution এবং Immediate Execution LINQ-এর দুটি গুরুত্বপূর্ণ এক্সিকিউশন মডেল। Deferred Execution ফ্লেক্সিবিলিটি এবং মেমোরি সাশ্রয়ের সুবিধা প্রদান করে, যখন Immediate Execution ডেটাকে এক্সিকিউট করার সাথে সাথেই সংগ্রহ করে, যার ফলে ডেটার স্থির ফলাফল পাওয়া যায়। কুয়েরি তৈরির উদ্দেশ্য এবং ডেটার পরিমাণের উপর ভিত্তি করে আপনাকে সঠিক এক্সিকিউশন মডেলটি বেছে নিতে হবে।
common.read_more